package com.livegoods.service.impl;

import com.livegoods.pojo.LivegoodsResult;
import com.livegoods.pojo.LoginLog;
import com.livegoods.service.LoginService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.time.Duration;
import java.util.Date;
import java.util.Random;

@Service
public class LoginServiceImpl implements LoginService {


    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 验证码 发送思路
     * 1，通过当前手机号作为key 去redis中获取对应的值
     *   1.1 有，返回一个提示小时，验证码2分钟有效，请不要频繁发送验证码
     *   1.2 没有，生成一个随机4-6位数字,调用 阿里短信api将随机发发送给用户
     *   1.3 同时将随机数存储到redis中，当前手机号作为 redis的key ，有效时间2分钟
     *
     * @param phone
     * @return
     */


    @Override
    public LivegoodsResult sendyzm(String phone) {


        String yzm = (String) redisTemplate.opsForValue().get(phone);

        if(yzm != null){
            return LivegoodsResult.error("验证码2分钟有效，请不要频繁发送验证码...");
        }

        //生成随机四位数字
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            sb.append( random.nextInt(9));
        }
        //调用阿里的短信API发送短信
        //TODO

        //将随机数存储到Redis中
        redisTemplate.opsForValue().set(phone,sb.toString(),Duration.ofMinutes(2));


        return LivegoodsResult.ok();
    }

    @Override
    public LivegoodsResult login(String username, String password) {


        /**
         *
         * 登录的思路
         *
         * 通过当前username去Redis获取对应的验证码（2分钟有效）
         *  如果Redis没有验证码，说明当前验证码已经超时，登录时长超时，必须从新发送验证码才能再次登录
         *
         *
         */

        //创建LogoinLog对象
        LoginLog loginLog = new LoginLog();
        loginLog.setUsername(username);
        loginLog.setPassword(password);
        loginLog.setType(1);
        loginLog.setTime(new Date());
        //获取验证码，如果发送验证码2分钟以内有数据，超过2分钟为空
        String  yzm = (String) redisTemplate.opsForValue().get(username);
        LivegoodsResult livegoodsResult = null;
        if(StringUtils.isNotBlank(yzm)){
            loginLog.setMsg("登录成功！");
            livegoodsResult = LivegoodsResult.ok();
            livegoodsResult.setMsg("登录成功");
            livegoodsResult.setResults(1);

            //用户输入验证码和Redis的验证码不相等，登录失败
            if(!yzm.equals(password)){
                loginLog.setMsg("验证码不正确，登录失败！");
                livegoodsResult.setResults(2);
                livegoodsResult = LivegoodsResult.error("验证码不正确，登录失败！");
            }

        }else{
            loginLog.setMsg("验证码超时，登录失败！");
            livegoodsResult.setResults(2);
            livegoodsResult = LivegoodsResult.error("验证码超时，登录失败！");
        }

        mongoTemplate.save(loginLog);


        return livegoodsResult;
    }
}
